import { ServerResult, UserAppTree } from "./interface"

/**
 * 文件名正则， 全局使用
 * 其中长度不少于2，首尾非空格
 */
export const REG_NAME = /^(?!^\s)(?!.*\s$)[a-zA-Z0-9_\-（()）\u4e00-\u9fa5\s]{1,}$/
/** 替换掉非法字符 */
export const REG_NAME_REPLACE = /[^\w_\-（()）\u4e00-\u9fa5\s]/g
export const API = {
    success: function <T>(data: T): ServerResult<T> {
        return {
            success: true,
            data,
        }
    },
    error: function (message?: string): ServerResult {
        return {
            success: false,
            data: undefined as never,
            message,
        }
    },
}
export enum DIR_TYPE {
    FILES = 'files',
    DOCS = 'docs',
    PROFILE = 'profile.json',
    TEMP = 'temp',
}

export function insertElementAt<T>(arr: T[], current: number, anchor: number) {
    const elementToInsert = arr.splice(current, 1)[0];
    // 如果 current < anchor，插入位置需要减 1，因为移除了一个元素
    if (current < anchor) {
        anchor -= 1;
    }
    // 在下标为 m 的位置插入该元素
    arr.splice(anchor, 0, elementToInsert);
    return arr;
}

export function stringify(obj: any) {
    return JSON.stringify(obj, null, 2)
}

export function formatDoc(content = ''): {
    content: string;
    meta?: UserAppTree;
} {
    const dscp = content.match(/^---([\s\S]*?)---/)
    if (dscp) {
        content = content.replace(/^---([\s\S]*?)---/, '')
        try {
            const meta = JSON.parse(dscp[1])
            return {
                content,
                meta: {
                    ...meta,
                    title: meta.title?.replace(REG_NAME_REPLACE, '_')
                },
            }
        } catch (e) {
            return { content }
        }
    }
    return { content }
}